package utils

import (
	"crypto/md5"
	"encoding/base64"
	"encoding/hex"
	"fmt"
	"math/rand"
	"sofuny/config"
	"time"
)

// app

var app = config.App()

const (
	DataBindErrorMessage = "数据绑定错误"
	DataEmptyMessage     = "有必需数据为空"
	DataSuccessMessage   = "success"
)

// 余额 Response
type BalanceResp struct {
	Status      string `json:"status"`
	Balance     int    `json:"balance"`
	FreeBalance int    `json:"free_balance"`
}

// 邮件 Response
type EmailResp struct {
	Status string              `json:"status"`
	Return []map[string]string `json:"return"`
}

// value
type Value struct {
	ID          int    `json:"id"`
	Uuid        string `json:"uuid"`
	Email       string `json:"email"`
	NewSentence string `json:"newSentence"`
	Source      string `json:"source"`
	Content     string `json:"content"`
	Username    string `json:"username"`
	Password    string `json:"password"`
	// 文章
	Author   string   `json:"author"`
	Title    string   `json:"title"`
	Type     int      `json:"type"`
	Category string   `json:"category"`
	Tags     []string `json:"tags"`
	ImgUrl   string   `json:"imgUrl"`
	Abstract string   `json:"abstract"`
	// 友人帐
	Name string `json:"name"`
	Url  string `json:"url"`
	Logo string `json:"logo"`
	// 订阅类型
	SubscribeType string `json:"subscribeType"`
}

// Response
type Response struct {
	Code  int         `json:"code"`
	Msg   string      `json:"msg"`
	Data  interface{} `json:"data"`
	Total int         `json:"total"`
	Time  string      `json:"time"`
}

// md5
func MD5(str string) string {
	s := md5.New()
	s.Write([]byte(str))
	return hex.EncodeToString(s.Sum(nil))
}

// base64 编码
func Base64Encode(data string) string {
	return base64.URLEncoding.EncodeToString([]byte(data))
}

// base64 解码
func Base64Decode(data string) string {
	b, err := base64.URLEncoding.DecodeString(data)
	if err != nil {
		return ""
	}
	return string(b)
}

// 时间格式化
func FormatTime() string {
	return time.Now().Local().Format("2006-01-02 15:04:05")
}

// 生成6位数字　验证码
func SixCaptcha() string {
	return fmt.Sprintf("%06v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(1000000))
}
